package model.i;

import model.Battle;
import model.Player;
import model.Statistics;
import model.playingfield.PlayingField;

/**
 *
 * @author christopher
 * Defines core functionality of the State
 */
public interface IState {

    /**
     * Remove a player from the game
     * @param player
     */
    public void removePlayer(Player player);

    /**
     *
     * @param player
     */
    public void setCurrentPlayer(Integer player);

    /**
     * Get players currently in the game
     * @return
     */
    public Player getPlayer(int player);

    /**
     * Get current player
     * @return
     */
    public Integer getCurrentPlayer();

    /**
     * Return a reference to the Statistics instance
     * @return
     */
    public Statistics[] getStatistics();

    /**
     * Get playerLocations
     * @return
     */
    public Integer[][] getPlayerLocations();

    /**
     * The following are functions for setting/getting the various
     * state variables of the State.
     */
    public void setDieRolled(boolean dieRolled);
    public boolean isDieRolled();

    public void setSpotSelected(boolean spotSelected);
    public boolean hasMoved();

    public void setMoveMade(boolean moveMade);
    public boolean isMoveMade();

    public void setGameInProgress(boolean gameInProgress);
    public boolean isGameInProgress();

    public void setCurrentDieValue(int currentDieValue);
    public int getCurrentDieValue();

    /**
     * Resets all state variables
     */
    public void resetStateVars();

    /**
     * returns a reference to the playingfield
     */
    public PlayingField getPlayingField();

    public int getNumOfPlayers();

    public void setBattle(Battle string);

    public Battle getBattle();
}
